home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8614 / 8614.xpi / modules / utils / io.jsm < prev    next >
Text File  |  2010-02-10  |  6KB  |  242 lines

  1. // DO NOT import this into the global namespace, but instead
  2. // import it into your own namespace wrapper
  3.  
  4. var EXPORTED_SYMBOLS = ["FileIO","DirIO"];
  5.  
  6. Components.utils.import("resource://glydo/utils/Utils.jsm");
  7.  
  8. var FileIO = {
  9.  
  10.   localfileCID :'@mozilla.org/file/local;1',
  11.   localfileIID :Components.interfaces.nsILocalFile,
  12.  
  13.   finstreamCID :'@mozilla.org/network/file-input-stream;1',
  14.   finstreamIID :Components.interfaces.nsIFileInputStream,
  15.  
  16.   foutstreamCID :'@mozilla.org/network/file-output-stream;1',
  17.   foutstreamIID :Components.interfaces.nsIFileOutputStream,
  18.  
  19.   sinstreamCID :'@mozilla.org/scriptableinputstream;1',
  20.   sinstreamIID :Components.interfaces.nsIScriptableInputStream,
  21.  
  22.   suniconvCID :'@mozilla.org/intl/scriptableunicodeconverter',
  23.   suniconvIID :Components.interfaces.nsIScriptableUnicodeConverter,
  24.  
  25.   open : function(path) {
  26.       try {
  27.           var file = Components.classes[this.localfileCID]
  28.               .createInstance(this.localfileIID);
  29.           file.initWithPath(path);
  30.           return file;
  31.       } catch (e) {
  32.           return false;
  33.       }
  34.   },
  35.  
  36.   read : function(file, charset) {
  37.       try {
  38.           var data = new String();
  39.           var fiStream = Components.classes[this.finstreamCID]
  40.               .createInstance(this.finstreamIID);
  41.           var siStream = Components.classes[this.sinstreamCID]
  42.               .createInstance(this.sinstreamIID);
  43.           fiStream.init(file, 1, 0, false);
  44.           siStream.init(fiStream);
  45.           data += siStream.read(-1);
  46.           siStream.close();
  47.           fiStream.close();
  48.           if (charset) {
  49.               data = this.toUnicode(charset, data);
  50.           }
  51.           return data;
  52.       } catch (e) {
  53.           return false;
  54.       }
  55.   },
  56.  
  57.   write : function(file, data, mode, charset) {
  58.       try {
  59.           var foStream = Components.classes[this.foutstreamCID]
  60.               .createInstance(this.foutstreamIID);
  61.           if (charset) {
  62.               data = this.fromUnicode(charset, data);
  63.           }
  64.           var flags = 0x02 | 0x08 | 0x20; // wronly | create | truncate
  65.           if (mode == 'a') {
  66.               flags = 0x02 | 0x10; // wronly | append
  67.           }
  68.           foStream.init(file, flags, 0664, 0);
  69.           foStream.write(data, data.length);
  70.           // foStream.flush();
  71.           foStream.close();
  72.           return true;
  73.       } catch (e) {
  74.           return false;
  75.       }
  76.   },
  77.  
  78.   create : function(file) {
  79.       try {
  80.           file.create(0x00, 0664);
  81.           return true;
  82.       } catch (e) {
  83.           return false;
  84.       }
  85.   },
  86.  
  87.   unlink : function(file) {
  88.       try {
  89.           file.remove(false);
  90.           return true;
  91.       } catch (e) {
  92.           return false;
  93.       }
  94.   },
  95.  
  96.   path : function(file) {
  97.       try {
  98.           return 'file:///' + file.path.replace(/\\/g, '\/').replace(/^\s*\/?/,
  99.               '').replace(/\ /g, '%20');
  100.       } catch (e) {
  101.           return false;
  102.       }
  103.   },
  104.  
  105.   toUnicode : function(charset, data) {
  106.       try {
  107.           var uniConv = Components.classes[this.suniconvCID]
  108.               .createInstance(this.suniconvIID);
  109.           uniConv.charset = charset;
  110.           data = uniConv.ConvertToUnicode(data);
  111.       } catch (e) {
  112.           // foobar!
  113.       }
  114.       return data;
  115.   },
  116.  
  117.   fromUnicode : function(charset, data) {
  118.       try {
  119.           var uniConv = Components.classes[this.suniconvCID]
  120.               .createInstance(this.suniconvIID);
  121.           uniConv.charset = charset;
  122.           data = uniConv.ConvertFromUnicode(data);
  123.           // data += uniConv.Finish();
  124.       } catch (e) {
  125.           // foobar!
  126.       }
  127.       return data;
  128.   }
  129.  
  130. };
  131.  
  132. var DirIO = {
  133.  
  134.   sep : (Utils.platformShort() == "windows") ? "\\" : "/",
  135.  
  136.   dirservCID :'@mozilla.org/file/directory_service;1',
  137.  
  138.   propsIID :Components.interfaces.nsIProperties,
  139.  
  140.   fileIID :Components.interfaces.nsIFile,
  141.  
  142.   get : function(type) {
  143.       try {
  144.           var dir = Components.classes[this.dirservCID].createInstance(
  145.               this.propsIID).get(type, this.fileIID);
  146.           return dir;
  147.       } catch (e) {
  148.           return false;
  149.       }
  150.   },
  151.  
  152.   open : function(path) {
  153.       return FileIO.open(path);
  154.   },
  155.  
  156.   create : function(dir) {
  157.       try {
  158.           dir.create(0x01, 0775);
  159.           return true;
  160.       } catch (e) {
  161.           return false;
  162.       }
  163.   },
  164.  
  165.   read : function(dir, recursive) {
  166.       var list = new Array();
  167.       try {
  168.           if (dir.isDirectory()) {
  169.               if (recursive == null) {
  170.                   recursive = false;
  171.               }
  172.               var files = dir.directoryEntries;
  173.               list = this._read(files, recursive);
  174.           }
  175.       } catch (e) {
  176.           // foobar!
  177.       }
  178.       return list;
  179.   },
  180.  
  181.   _read : function(dirEntry, recursive) {
  182.         var list = new Array();
  183.         try {
  184.             while (dirEntry.hasMoreElements()) {
  185.                 list.push(dirEntry.getNext().QueryInterface(FileIO.localfileIID));
  186.             }
  187.             if (recursive) {
  188.                 var list2 = new Array();
  189.                 for ( var i = 0; i < list.length; ++i) {
  190.                     if (list[i].isDirectory()) {
  191.                         files = list[i].directoryEntries;
  192.                         list2 = this._read(files, recursive);
  193.                     }
  194.                 }
  195.                 for (i = 0; i < list2.length; ++i) {
  196.                     list.push(list2[i]);
  197.                 }
  198.             }
  199.         } catch (e) {
  200.             // foobar!
  201.         }
  202.         return list;
  203.     },
  204.     
  205.     unlink : function(dir, recursive) {
  206.         try {
  207.             if (recursive == null) {
  208.                 recursive = false;
  209.             }
  210.             dir.remove(recursive);
  211.             return true;
  212.         } catch (e) {
  213.             return false;
  214.         }
  215.     },
  216.     
  217.     path : function(dir) {
  218.         return FileIO.path(dir);
  219.     },
  220.     
  221.     split : function(str, join) {
  222.         var arr = str.split(/\/|\\/), i;
  223.         str = new String();
  224.         for (i = 0; i < arr.length; ++i) {
  225.             str += arr[i] + ((i != arr.length - 1) ? join : '');
  226.         }
  227.         return str;
  228.     },
  229.     
  230.     join : function(str, split) {
  231.         var arr = str.split(split), i;
  232.         str = new String();
  233.         for (i = 0; i < arr.length; ++i) {
  234.             str += arr[i] + ((i != arr.length - 1) ? this.sep : '');
  235.         }
  236.         return str;
  237.     },
  238.     
  239.  
  240. };
  241.  
  242.